/********************************************
 * 功能说明: 
 * 模块名称: 
 * 系统名称: 
 * 软件版权: Frank
 * 系统版本: 1.0.0
 * 开发人员: Frank
 * 开发时间: 2019/8/21 19:17
 * 审核人员: 
 * 相关文档: 
 * 修改记录: 修改日期 修改人员 修改说明
 *********************************************/
package com.spring.arch.job.common.errorcode;

import com.spring.arch.common.exception.IErrorCode;

/**
 * 服务异常
 *
 * 参考 https://www.kancloud.cn/onebase/ob/484204 文章
 *
 * 一共 10 位，分成四段
 *
 * 第一段，1 位，类型
 *      1 - 业务级别异常
 *      2 - 系统级别异常
 * 第二段，3 位，服务编码
 *      001 - 系统服务
 *      002 - 工单服务
 *      003 - 人力资源
 *      004 - 资产服务
 *      005 - 财务服务
 *      006 - 现场服务
 *      007 - 资源管理
 *      008 - 设备服务
 *      009 - 基础服务
 *      010 - 客服服务
 *      010 - 客服服务
 *      010 - 客服服务
 *      010 - 客服服务
 *      ... - ...
 *      015 - JOB服务
 *      ... - ...
 * 第三段，3 位，模块
 *      不限制规则。
 *      一般建议，每个系统里面，可能有多个模块，可以再去做分段。以用户系统为例子：
 *          001 - Auth 模块
 *          002 - User 模块
 *          003 - MobileCode 模块
 * 第四段，3 位，错误码
 *       不限制规则。
 *       一般建议，每个模块自增。
 * @author Frank
 * @version 1.0.0.1
 * @since JDK 1.8
 */
public enum JobErrorCode implements IErrorCode {

    /**************通用模块*************/
    E1015000001(1015000001, "实体对象[%s]不存在"),

    /**************任务分发*************/
    E1015001001(1015001001, "任务参数信息为空"),
    E1015001002(1015001002, "任务执行器[%s]不存在"),
    E1015001003(1015001003, "任务[%s]不存在"),
    E1015001004(1015001004, "任务[%s]正在执行，不允许删除"),
    ;

    private int code;
    private String msg;

    /**
     * Msg string.
     *
     * @return the string
     */
    @Override
    public String msg() {
        return msg;
    }

    /**
     * Code int.
     *
     * @return the int
     */
    @Override
    public int code() {
        return code;
    }

    JobErrorCode(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 根据错误码获取错误信息
     * @param code 错误码
     * @return 错误信息
     */
    public static String getMsg(int code) {
        JobErrorCode[] values = JobErrorCode.values();
        for (int i = 0; i < values.length; i++) {
            if (code == values[i].code) {
                return values[i].msg;
            }
        }
        return null;
    }
}
